<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
<script>
//   async await一种语法糖
// generaror函数的语法糖 *函数

// async函数是generator函数的语法糖
// generator函数也就是*函数【可以暂停函数执行，调用next之后代码才会继续执行】
// *函数的调用并没有立即执行函数，返回一个迭代对象
// 调用迭代对象的next方法，函数会走到第一个yield
// next()的返回值是一个对象{value: 当前yield后面的值，done: 是否执行完毕}

// redux-saga函数
function *get() {
  console.log('开始执行')
  const res = yield 1
  console.log(res)
  const res2 = yield 2
}
// // next()的返回值是yield后面的内容
// // yield的返回值，下一次调用next的入参
//
// const gen = get() // 可迭代对象
// console.log(gen.next().value)
// console.log(gen.next(123)) // {value: 2}
// console.log(gen.next())


// await的返回值是他后面跟着的promise成功的结果
async function getList1() {
  const res = await new Promise((resolve, reject) => {
    resolve('1')
  })
  console.log(res)
}

// 实现了函数的可中断
// function *getList() {
//   console.log('23')
//   const res = yield new Promise((resolve, reject) => {
//     console.log('我是promise')
//     resolve('1')
//   })
//   console.log(res)
// }
//
// const gen = getList()
// gen.next().value.then(res => {
//   // console.log(res)
//   gen.next(res)
// })

// class语法糖【es5里面的构造函数的语法糖】

// function Parent() {}
//
// Parent.prototype.show = function () {}

class Parent {
  constructor() {

  }

  show() {}

}

console.dir(Parent)

// Promise源码的视线
console.log(1)
// new Promise((resolve, reject) => {
//   resolve(2)
// })
// console.log(3)

class Promise {
  constructor(excutor) {

    this.status = "PENDING"
    this.value = null
    const resolve = (value) => {
      this.status = "fulfilled"
      this.value = value
    }

    const reject = () => {
      this.status = "rejected"
    }
    excutor(resolve, reject)
  }

  then() {}

  static race() {

  }
}

console.dir(Promise)

// 静态方法直接在构造函数自身
// 原型方法挂载到类或者构造函数的prototype上

// 实例化对象

Promise.race()

 const p = new Promise(() => {

 })

p.then()



</script>
</body>
</html>
